
//练习题：封装一个栈, 并加入构造器和析构器
#include<iostream>
using namespace std;
#include<string.h>
#include<stdlib.h>

class Stack
{
public:
//定义行为
    // Stack()// 无参构造器
    // {
    //         space = new char[100]; //默认生成100个空间
    //         top = 0;
    //         _size = 100;
    // }
    // Stack(int size) //定义对象的时候设置空间大小的 有参构造器
    // {
    //     space = new char[size];
    //     top = 0;
    //     _size = size;
    // }

    Stack(int size = 3)  //默认参数
    {
        space = new char[size];
        top = 0;
        _size = size;
    }
    ~Stack()
    {
        delete[]space;
    }

    bool isEmpty();
    bool isFull();
    char pop();
    void push(char d);
private:
    //定义数据，private权限控制 类外不得修改
    int top;    //栈指针sp
    char *space; //动态栈空间
    int _size;
};


bool Stack::isEmpty()
{
    return top == 0;
}
bool Stack::isFull()
{
    return top == _size;
}
char Stack::pop()
{
    char d = space[--top];
    return d;
}
void Stack::push(char d)
{
    space[top++] = d;
}


int main ()
{
    Stack s(6); //有参构造
    //Stack s2; //无参构造


    for(char d = 'a'; !s.isFull()&& d!='z'; d++)
    {
        s.push(d);
    }
    while(!s.isEmpty())
        cout<<s.pop()<<endl;

    return 0;
}